package com.dong.jdk8.thread.problem;

import java.util.Vector;

/**
 * 在多线程环境中，如果不在方法调用端做额外的同步措施，使用这段仍是线程不安全的，
 * 因为如果一个线程恰好再错误的时间删除了一个元素， 导致i不在可用的话，get方法会抛出一个ArrayIndexOutOfBoundsException
 * @author jianyang206881
 * @date 2018/2/24
 */
public class VectorTest {
    private static Vector<String> vector = new Vector<String>();

    public static void main(String[] args) {
        while (true) {
            for (int i = 0; i < 10; i++) {
                System.out.println("添加字符串:" + i);
                vector.add("字符串:" + i);
            }

            Thread removeThread = new Thread(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < vector.size(); i++) {
                        System.out.println("removeThread删除:" + i);
                        vector.remove(i);
                    }
                }
            });

            Thread printThread = new Thread(new Runnable() {
                @Override
                public void run() {
                    for (int i = 0; i < vector.size(); i++) {
                        System.out.print("printThread获取:");
                        System.out.println((vector.get(i)));
                    }
                }
            });

            removeThread.start();
            printThread.start();

            //不要同时产生过多的线程，否则会导致操作系统假死
            while (Thread.activeCount() > 20) ;
        }
    }
}
